// 志愿者用户的登录与注册


//导入数据库操作模块
const db = require('../db/index')
const bcrypt = require('bcryptjs')
// 密码加密，无解密，提高安全性，导致数据库内密码数据都是加密的

// 导入生成Token的包
const jwt = require('jsonwebtoken')
// 导入全局的配置文件
const config = require('../config')


// 定义路由相关处理函数
exports.regTeacher = (req,res)=>{
    // 获取客户端提交到服务器的用户信息
    const teacherinfo = req.body
    //用户注册 
    // 定义SQL语句，查询用户名是否被占用
    const sqlStr = `select * from teacherinfo where userName=?`
    db.query(sqlStr,teacherinfo.userName,(err,results)=>{
        // 执行SQL语句失败
        if(err){
            return res.cc(err)
        }
        if(results.length>0){
            return res.cc('用户名被占用')
        }
        // 对密码进行加密
        teacherinfo.password = bcrypt.hashSync(teacherinfo.password,10)
        // 用户插入
        const sqlstr = `insert into teacherinfo(userName,password) values(?,?)`
        db.query(sqlstr, [teacherinfo.userName, teacherinfo.password], (err, results) => {
          // 插入失败
            if(err) return res.cc(err) 
            if (results.affectedRows !== 1) return res.cc('教师用户注册失败！')
            res.cc('教师用户注册成功！',0)
        })
    })   
    
}
exports.login=(req,res)=>{
    const teacherinfo = req.body
    const sql = `select * from teacherinfo where userName = ?`
    db.query(sql,teacherinfo.userName,(err,results)=>{
        if(err) return res.cc(err)
        if(results.length!==1) return res.cc('登录失败')
        
        const compareResult = bcrypt.compareSync(teacherinfo.password,results[0].password)
        if(!compareResult) return res.cc('登录失败')
        // 在服务器端生成Token的字符串
        const user = {...results[0],password:'',teacher_pic:''}
        // 对用户的信息进行加密，生成Token字符串
        const tokenStr = jwt.sign(user,config.jwtSecretKey,{ expiresIn:config.expiresIn })
        // 调用res.send()将ToKen响应给客户端
        res.send({
            status:0,
            message:'登录成功',
            token:'Bearer '+tokenStr,
        })
    })
}

exports.queryTeacher=(req,res)=>{
    const sqlStr = `select * from teacherinfo where is_delete=0`
    db.query(sqlStr,(err,results)=>{
        // 执行SQL语句失败
        if(err){
            return res.send({status:1,message:err.message})
        }else{
            res.json({results})
        }
    })   
}
